"""Module for AI agent integration."""

import os
import json
from typing import Dict, Any, Generator


class AgentInterface:
    """Base class for AI agent interface."""
    
    def __init__(self):
        # 初始化系统提示信息
        self.system_prompt = """
        你是一个专业的射电天文学仿真软件助手。这个软件可以模拟射电望远镜的观测过程。
        软件的主要功能包括：
        1. 加载天体图像数据（支持FITS文件和.npy文件序列）
        2. 对数据进行预处理和过滤
        3. 进行空间和频率插值
        4. 模拟漂移扫描观测
        5. 生成观测结果
        
        软件的主要工作流程是：
        1. 读取天图文件(load_sky_image)
        2. 数据预处理(filter_data)
        3. 空间和频率插值(interpolate_spatial, interpolate_frequency)
        4. 模拟观测(simulate_drift_scan)
        5. 输出时间和频率的二维数组结果
        
        根据用户意图采取不同行动：
        - 如果用户想了解代码说明或工作流，展示软件结构和功能
        - 如果用户想运行代码，引导用户提供文件或文件夹路径
        """
    
    def process_data(self, data):
        """Process data with AI agent."""
        pass
        
    def optimize_parameters(self, params, data):
        """Optimize observation parameters."""
        pass
        
    def generate_report(self, results):
        """Generate analysis report."""
        pass
        
    def identify_user_intent(self, user_input: str) -> str:
        """
        识别用户意图
        
        Args:
            user_input: 用户输入的文本
            
        Returns:
            intent: 用户意图类别 ('code_explanation', 'run_code', 'other')
        """
        # 简单的关键词匹配来识别意图
        explanation_keywords = ['说明', '解释', '文档', '结构', '工作流', '流程', '功能', '怎么用', '如何使用']
        run_keywords = ['运行', '执行', '模拟', '观测', '文件', '数据', '路径']
        
        for keyword in explanation_keywords:
            if keyword in user_input:
                return 'code_explanation'
                
        for keyword in run_keywords:
            if keyword in user_input:
                return 'run_code'
                
        return 'other'
        
    def get_code_explanation(self) -> str:
        """
        获取代码说明
        
        Returns:
            explanation: 代码结构和功能说明
        """
        explanation = """
        Radio Simulator 软件结构说明：
        
        1. data 模块:
           - DataLoader 类: 负责加载天体图像数据
             * load_sky_image(): 支持FITS文件和.npy文件序列
             
        2. processing 模块:
           - Preprocessor 类: 数据预处理
             * filter_data(): 数据过滤功能
             
        3. models 模块:
           - SkyImage 类: 天体图像数据模型
             * interpolate_spatial(): 空间插值
             * interpolate_frequency(): 频率插值
             * get_intensity_at_coordinate(): 获取指定坐标的强度值
             
        4. observation 模块:
           - ObservationSimulator 类: 观测模拟
             * simulate_drift_scan(): 模拟漂移扫描观测
             
        5. main 模块:
           - mock_observation(): 主工作流程函数
           
        工作流程:
        1. 使用 DataLoader.load_sky_image() 读取数据
        2. 使用 Preprocessor.filter_data() 预处理数据
        3. 创建 SkyImage 对象进行插值处理
        4. 使用 ObservationSimulator.simulate_drift_scan() 模拟观测
        5. 返回时间和频率的二维数组结果
        """
        return explanation
        
    def get_run_code_prompt(self) -> str:
        """
        获取运行代码的提示
        
        Returns:
            prompt: 引导用户提供文件路径的提示
        """
        prompt = """
        请提供要处理的天体图像文件或文件夹路径：
        
        支持的文件格式：
        1. FITS 文件 (.fits, .fit)
        2. 包含 .npy 文件序列的文件夹
        
        示例：
        - "/path/to/image.fits"
        - "/path/to/data_folder"
        
        提供路径后，我将开始模拟观测流程。
        """
        return prompt
        
    def chat_with_user(self, user_input: str) -> Generator[str, None, None]:
        """
        与用户对话
        
        Args:
            user_input: 用户输入
            
        Yields:
            response: 流式响应内容
        """
        intent = self.identify_user_intent(user_input)
        
        if intent == 'code_explanation':
            explanation = self.get_code_explanation()
            # 流式输出解释内容
            for char in explanation:
                yield char
        elif intent == 'run_code':
            prompt = self.get_run_code_prompt()
            # 流式输出提示内容
            for char in prompt:
                yield char
        else:
            response = "您好！我是射电天文仿真软件助手。您可以询问关于软件结构的说明，或者让我帮您运行观测模拟。请问有什么可以帮助您的吗？"
            for char in response:
                yield char